contents

CI/CD에 대해 질문하신 것으로 가정하고 답변해 드리겠습니다. 이는 현대 소프트웨어 개발의 핵심적인 관행입니다. CI/CD지속적 통합(Continuous Integration)지속적 전달(Continuous Delivery) / 지속적 배포(Continuous Deployment) 의 약자입니다. 이는 개발팀이 소프트웨어를 더 빠르고 안정적으로 빌드, 테스트, 릴리즈할 수 있게 해주는 자동화된 관행의 집합입니다.

각 부분을 자세히 살펴보겠습니다.


파트 1: 지속적 통합 (CI) 🔄

지속적 통합은 개발자들이 자신의 코드 변경 사항을 중앙 공유 저장소(예: Git의 main 브랜치)에 자주 병합(merge)하는 관행입니다. 핵심은 각 병합이 자동화된 빌드 및 테스트 프로세스를 트리거한다는 점입니다.

CI가 해결하는 문제

CI 이전에는 개발자들이 종종 몇 주 또는 몇 달 동안 장기간의 기능 브랜치에서 독립적으로 작업했습니다. 마침내 모든 것을 병합할 때가 되면, 이는 충돌하는 코드, 숨겨진 버그, 그리고 모든 사람의 작업을 통합하려는 며칠간의 노력으로 가득 찬 "머지 헬(merge hell, 통합 지옥)"로 이어졌습니다.

CI 프로세스

CI는 작은 변경 사항을 자주 통합함으로써 이 문제를 해결합니다. 일반적인 자동화 워크플로우는 다음과 같습니다.

  1. 코드 커밋: 개발자가 작은 변경 사항을 커밋하고 버전 관리 저장소에 푸시(push)합니다.
  2. 자동화된 빌드: CI 서버(Jenkins, GitHub Actions, GitLab CI 등)가 푸시를 감지하고 자동으로 최신 코드를 가져옵니다. 그런 다음 코드를 컴파일하고, 의존성을 해결하며, 실행 파일이나 패키지를 생성하여 애플리케이션을 빌드합니다.
  3. 자동화된 테스트: 빌드가 성공하면 서버는 자동화된 테스트 스위트를 실행합니다. 여기에는 일반적으로 다음이 포함됩니다.
  1. 피드백: 빌드 및 테스트 결과는 즉시 팀에 보고됩니다. 빌드나 테스트가 실패하면("빨간" 빌드), 팀은 즉시 알림을 받아 문제를 해결할 수 있습니다. 모든 것이 통과되면("녹색" 빌드), 코드는 성공적으로 통합된 것으로 간주됩니다.

CI의 핵심 목표는 통합 버그를 조기에 그리고 자주 찾아 수정하는 것입니다.


파트 2: 지속적 전달 & 지속적 배포 (CD) 🚀

CD는 CI의 다음 단계입니다. 성공적으로 통합된 코드의 릴리즈를 자동화합니다. 여기에는 밀접하게 관련된 두 가지 개념이 있습니다.

A. 지속적 전달 (Continuous Delivery)

지속적 전달은 CI의 확장입니다. 이는 자동화된 테스트를 통과한 모든 변경 사항이 릴리즈를 위해 자동으로 준비되고 패키징됨을 의미합니다. 그 결과물( "아티팩트")은 테스트 또는 스테이징 환경에 배포되며, 언제든지 운영 환경에 배포될 준비가 된 것으로 간주됩니다.

B. 지속적 배포 (Continuous Deployment)

지속적 배포는 지속적 전달을 한 단계 더 발전시킨 것입니다. 이는 자동화된 파이프라인의 모든 단계를 통과한 모든 변경 사항이 인간의 개입 없이 자동으로 운영 환경에 배포되는 관행입니다.

요약:


완전한 CI/CD 파이프라인

완전한 CI/CD 파이프라인은 코드 커밋부터 운영 환경 배포까지 전체 소프트웨어 릴리즈 프로세스를 자동화합니다.

코드 커밋빌드테스트 (CI)릴리즈 준비된 아티팩트 (지속적 전달)운영 환경에 배포 (지속적 배포)

CI/CD의 이점 ✅

CI/CD를 채택하면 엄청난 이점을 얻을 수 있습니다.

인기 있는 CI/CD 도구

references